<template>
    <a-radio-group v-if="tagType=='radio'" @change="handleInput" :value="getValueSting"
        :disabled="disabled">
        <a-radio v-for="(item, key) in dictOptions" :key="key"
            :value="item.value">{{ item.text }}</a-radio>
    </a-radio-group>

    <a-radio-group v-else-if="tagType=='radioButton'" buttonStyle="solid" @change="handleInput"
        :value="getValueSting" :disabled="disabled">
        <a-radio-button v-for="(item, key) in dictOptions" :key="key"
            :value="item.value">{{ item.text }}</a-radio-button>
    </a-radio-group>

    <a-select v-else-if="tagType=='select'" :getPopupContainer="getPopupContainer"
        :placeholder="placeholder" :disabled="disabled" :value="getValueSting"
        @change="handleInput">
        <a-select-option :value="undefined">请选择</a-select-option>
        <a-select-option v-for="(item, key) in dictOptions" :key="key" :value="item.value">
            <span style="display: inline-block;width: 100%" :title=" item.text || item.label ">
                {{ item.text || item.label }}
            </span>
        </a-select-option>
    </a-select>
</template>

<script>
import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'

export default {
    name: "JDictSelectTag",
    props: {
        dictCode: String,
        placeholder: String,
        triggerChange: Boolean,
        disabled: Boolean,
        value: [String, Number],
        type: String,
        getPopupContainer: {
            type: Function,
            default: (node) => node.parentNode
        }
    },
    data() {
        return {
            dictOptions: [],
            tagType: ""
        }
    },
    watch: {
        dictCode: {
            immediate: true,
            handler() {
                this.initDictData()
            },
        }
    },
    created() {
        // console.log(this.dictCode);
        if (!this.type || this.type === "list") {
            this.tagType = "select"
        } else {
            this.tagType = this.type
        }
        //获取字典数据
        // this.initDictData();
    },
    computed: {
        getValueSting() {
            // update-begin author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
            // 当有null或“” placeholder不显示
            return this.value != null ? this.value.toString() : undefined;
            // update-end author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
        },
    },
    methods: {
        initDictData() {
            //优先从缓存中读取字典配置
            if (getDictItemsFromCache(this.dictCode)) {
                this.dictOptions = getDictItemsFromCache(this.dictCode);
                return
            }

            //根据字典Code, 初始化字典数组
            ajaxGetDictItems(this.dictCode, null).then((res) => {
                if (res.success) {
                    //                console.log(res.result);
                    this.dictOptions = res.result;
                }
            })
        },
        handleInput(e) {
            let val;
            if (this.tagType == "radio") {
                val = e.target.value
            } else {
                val = e
            }
            console.log(val);
            if (this.triggerChange) {
                this.$emit('change', val);
            } else {
                this.$emit('input', val);
            }
        },
        setCurrentDictOptions(dictOptions) {
            this.dictOptions = dictOptions
        },
        getCurrentDictOptions() {
            return this.dictOptions
        }
    }
}
</script>

<style scoped>
</style>